package sixth.抽象类与接口的应用.设计模式.代理设计;
interface NetWork{//定义NetWork接口
    public void browse();//定义浏览的抽象接口
}
class Real implements NetWork{//真实的上网操作
    @Override
    public void browse() {//覆写上网方法
        System.out.println("上网浏览信息");
    }
}
class Proxy implements NetWork{//代理上网
    private NetWork netWork;
    public Proxy(NetWork netWork){//设置代理的真实操作 传入主题类Real
        this.netWork=netWork;//传入真实类
    }
    public void check(){
        System.out.println("检查用户是否合法");
    }
    @Override
    public void browse() {//同时调用多个业务
        this.check();
        this.netWork.browse();//调用的是真实类的browse方法
    }
}
public class 代理模式 {
    public static void main(String[] args) {
        NetWork net = null;
        net = new Proxy(new Real());//为了向上转型调用覆写的browse方法 传入真实类操作
        net.browse();
    }
}
/*
D:\WorkSpaces\Java\jdk-21\bin\java.exe "-javaagent:D:\Software\IntelliJ IDEA\IntelliJ IDEA 2023.3.2\lib\idea_rt.jar=63161:D:\Software\IntelliJ IDEA\IntelliJ IDEA 2023.3.2\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath D:\WorkSpaces\JavaDevelopBase_start_329\out\production\JavaDevelopBase_start_329 sixth.抽象类与接口的应用.设计模式.代理设计.代理模式
检查用户是否合法
上网浏览信息

Process finished with exit code 0

 */
/**
 * 为什么Real类只需要browse就行
 * 因为Real类是真正需要做的事情
 * 其他这些注册 登录拦截都用代理类来实现
 * 真实类完成的是最基本的功能
 * 而代理类要做比真实类更多的业务操作
 */